"""
@Project ：python
@File    ：02-文件的读取.py
@IDE     ：PyCharm
@Author  ：DongCha
@Date    ：2024/4/6 006 2:17
"""
import time

# open(name, mode, encoding) 打开文件
# name：打开的目标文件名字符串，可以包含文件所在具体目录
# mode：打开文件模式（访问模式），只读、写入、追加等
# r：以只读方式打开文件，文件的指针会放在文件开头，是默认模式
# w：打开一个文件只用于写入，如果该文件已存在，那么打开文件，并从头开始编辑，原有内容会被删除，如果文件不存在，则创建新文件
# a：打开一个文件用于追加，如果该文件已存在，新内容会被写入已有的内容之后，如果文件不存在，则创建新文件
# encoding：编码格式，推荐 UTF-8
# 打开文件
f = open('./doc/python.txt', 'r', encoding='utf-8')  # encoding 的顺序不是第三个，所以使用关键字指定
print(type(f))
# 此时，f 是 open 函数的文件对象，对象是 Python 中一种特殊的数据类型，拥有属性和方法，可以使用 对象.属性 或 对象.方法 对其进行访问

# read(num)：读取文件，num 表示从文件中读取的数据长度（单位是字节），如果没有传入 num 那么表示读取文件中所有的数据
f = open('./doc/python.txt', 'r', encoding='utf-8')
print(f"f.read(): {f.read()}")
f.close()  # 关闭文件
f = open('./doc/python.txt', 'r', encoding='utf-8')
print(f"f.read(5): {f.read(3)}")
f.close()

# readlines()：按照行的方式将整个文件中的内容进行一次性读取，并返回一个列表，每一行数据是为一个元素
f = open('./doc/python.txt', 'r', encoding='utf-8')
print(f"f.readlines()：{f.readlines()}")
f.close()

# readline()：一次读取一行内容
f = open('./doc/python.txt', 'r', encoding='utf-8')
print(f"f.readline()：{f.readline()}")
f.close()

# for 循环读取文件行
for line in open('./doc/python.txt', 'r', encoding='utf-8'):
    print(f"for line in line: {line}")

# close()：关闭文件
f = open('./doc/python.txt', 'r', encoding='utf-8')
f.close()

# with open：自动完成 f.close()
with open('./doc/python.txt', 'r', encoding='utf-8') as f:
    for line in f:
        print(f"with open for line in line: {line}")

# 统计指定文件中指定字符出现次数
with open('./doc/words.txt', 'r', encoding='utf-8') as f:
    print(f.read().count("aaa"))
